/**
  ******************************************************************************
  * @file    I2C/EEPROM/stm32f4xx_it.c 
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    30-September-2011
  * @brief   Main Interrupt Service Routines.
  *          This file provides template for all exceptions handler and 
  *          peripherals interrupt service routine.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */ 

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_it.h"
#include "usart.h"
#include "zFiles/main.h"
#include "LCD/LCD.h"

#define USARTx_IRQHANDLER   USART3_IRQHandler
/** @addtogroup STM32F4xx_StdPeriph_Examples
  * @{
  */

/** @addtogroup I2C_EEPROM
  * @{
  */ 

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
u32 vsync = 0;
u32 iline = 0;
u32 frame = 0;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/******************************************************************************/
/*            Cortex-M4 Processor Exceptions Handlers                         */
/******************************************************************************/

/**
  * @brief   This function handles NMI exception.
  * @param  None
  * @retval None
  */
void NMI_Handler(void)
{
}

/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
	printf("\r\n");
	printf("HARD FAULT \r\n");
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Memory Manage exception.
  * @param  None
  * @retval None
  */
void MemManage_Handler(void)
{
  /* Go to infinite loop when Memory Manage exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Bus Fault exception.
  * @param  None
  * @retval None
  */
void BusFault_Handler(void)
{
  /* Go to infinite loop when Bus Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Usage Fault exception.
  * @param  None
  * @retval None
  */
void UsageFault_Handler(void)
{
  /* Go to infinite loop when Usage Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles SVCall exception.
  * @param  None
  * @retval None
  */
void SVC_Handler(void)
{
}

/**
  * @brief  This function handles Debug Monitor exception.
  * @param  None
  * @retval None
  */
void DebugMon_Handler(void)
{
}

/**
  * @brief  This function handles PendSVC exception.
  * @param  None
  * @retval None
  */
void PendSV_Handler(void)
{
}

extern uint32_t	fps;
extern uint32_t	disfps;
/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
//void SysTick_Handler(void)
//{
//	TimingDelay_Decrement();
//}
// look in zbtime for this 

/******************************************************************************/
/*                 STM32F4xx Peripherals Interrupt Handlers                   */
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
/*  available peripheral interrupt handler's name please refer to the startup */
/*  file (startup_stm32f4xx.s).                                               */
/******************************************************************************/
void USARTx_IRQHANDLER(void)
{
	// if rx is not empty and there was no line break
  if((USART_GetITStatus(Debug_USART, USART_IT_RXNE) != RESET) && (USART_GetITStatus(Debug_USART, USART_IT_LBD) == RESET))
  {
  		//if(USART3->SR == 0x1D0 || USART3->SR == 0xD0)
		//{
	  		debugChar = USART_ReceiveData(Debug_USART);
			printf("\n\rDebug input command: %c\n\r",debugChar);
	//	}
  		USART_ClearITPendingBit(Debug_USART,USART_IT_RXNE);	
  }else{
	  	printf("\n\r In usart int unexected flag, or line break");
	  	printf("\n\r || USART2->SR:0x%x USART2->CR1:0x%x ", USART2->SR, USART2->CR1 );
	  	printf("\n\r || USART3->SR:0x%x USART3->CR1:0x%x ", USART3->SR, USART3->CR1 );
		printf("Erasing all it flags");
		USART_ClearITPendingBit(Debug_USART,USART_IT_CTS | USART_IT_LBD | USART_IT_TC | USART_IT_RXNE);
		// read sequence also clears flags like ore etc
		USART_ReceiveData(Debug_USART);
  }
}

void DCMI_IRQHandler(void)
{  	   
	if (DCMI_GetITStatus(DCMI_IT_VSYNC) != RESET) 
	{	 		   
		//GUI_Text_variables(0,0,White,Black,disfps);
		//LCD_SetCursor(0,0);
		//LCD_REG = 0x0022;		
		DCMI_ClearITPendingBit(DCMI_IT_VSYNC);
		//fps++;	
		vsync++;  
	}
	
	if (DCMI_GetITStatus(DCMI_IT_LINE) != RESET) 
	{
		DCMI_ClearITPendingBit(DCMI_IT_LINE);
		iline++; 			  
	}
	
	if (DCMI_GetITStatus(DCMI_IT_FRAME) != RESET) 
	{
		DCMI_ClearITPendingBit(DCMI_IT_FRAME);
		frame++;
		printf("\n\r Frame vs: %d , ln: %d , fm: %d", vsync, iline, frame );
		vsync = iline = frame = 0;
//		mygVars->VideoStat++;
	}
	if (DCMI_GetITStatus(DCMI_IT_ERR) != RESET) 
	{
		DCMI_ClearITPendingBit(DCMI_IT_ERR);
		printf("\n\r CAM ERR vs: %d , ln: %d , fm: %d", vsync, iline, frame );
		vsync = iline = frame = 0;
	}
	if (DCMI_GetITStatus(DCMI_IT_OVF) != RESET) 
	{
		DCMI_ClearITPendingBit(DCMI_IT_OVF);
		printf("\n\r CAM OVF vs: %d , ln: %d , fm: %d", vsync, iline, frame );
		vsync = iline = frame = 0;
		DCMI_CaptureCmd(ENABLE);
	}


	 
}
/**
  * @brief  This function handles PPP interrupt request.
  * @param  None
  * @retval None
  */
/*void PPP_IRQHandler(void)
{
}*/

/**
  * @}
  */ 

/**
  * @}
  */ 

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
